/*
	Copyright (C) 2019 Zongming Liu <1849059316@qq.com>

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.
	
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License along
	with this program; if not, write to the Free Software Foundation, Inc.,
	51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#ifndef SmartPtrDef_h__
#define SmartPtrDef_h__

#include <memory>

#define ClassName(class_) \
	namespace SkyEngine2d{ class class_; }

#define SmartPrtDef(class_name)\
		ClassName(class_name)\
		using class_name##SharedPtr = std::shared_ptr<SkyEngine2d::##class_name>;		\
		using class_name##WeakPtr = std::weak_ptr<SkyEngine2d::##class_name>;			\
		using class_name##UniquePtr = std::unique_ptr<SkyEngine2d::##class_name>;  
		


/////////////////节点系统///////////////////////
SmartPrtDef(Node)
SmartPrtDef(Sprite)
SmartPrtDef(SpriteFrame)
SmartPrtDef(TextNode)
SmartPrtDef(Scene)
SmartPrtDef(Widget)
SmartPrtDef(PushButton)

//////////////////事件系统////////////////////////////

SmartPrtDef(EventListenerMouse)
SmartPrtDef(EventListenerKeyboard)

//////////////////其它/////////////////////
SmartPrtDef(TextFont)
SmartPrtDef(Texture2D)

//////////////////UI///////////////////
SmartPrtDef(Widget)
SmartPrtDef(PushButton)
SmartPrtDef(UiLayer)
SmartPrtDef(Font)
SmartPrtDef(Text)
SmartPrtDef(LineEdit)
SmartPrtDef(CheckBox)
SmartPrtDef(DefultWidget)
SmartPrtDef(ProgressBar)
SmartPrtDef(ListWidget)
SmartPrtDef(ListWidgetItem)
SmartPrtDef(Label)

////////////////动画//////////////////////////
SmartPrtDef(AnimationFrame)
SmartPrtDef(Animation)
SmartPrtDef(Animate)
SmartPrtDef(ActionSequence)
SmartPrtDef(ActionInterval)
SmartPrtDef(ActionTime)
SmartPrtDef(ActionInstant)
SmartPrtDef(ActionCallFunction)
SmartPrtDef(Action)
SmartPrtDef(ActionMove)
SmartPrtDef(ActionSimple)

#endif // SmartPtrDef_h__
